var express = require('express');
var upload_byfront_router = express.Router();

var qiniu = require("qiniu"); //七牛云sdk
var accessKey = 'jZqJJaylJQLuMvzSQ7UarZd3mqSUvOpRYERnwF8L'; //公钥
var secretKey = '1sodQylkOmorqIESo-0q_qlv7USjhNl83EkCLwN1'; //私钥
var mac = new qiniu.auth.digest.Mac(accessKey, secretKey);//创建各种上传凭证之前，我们需要定义好其中鉴权对象mac：
//要上传的空间
bucket = 'hmytest'; //我的bucket名称,即文件的命名空间的名称
//上传到七牛后保存的文件名
// key = ''; //此处我的操作是直接在前台生成我需要保持的文件名,然后发到给后端。也可以把文件名直接发到后端,让后端处理,由于前端后端都是我一个人写的,所以我比较随意
//自定义凭证有效期（示例2小时，expires单位为秒，为上传凭证的有效时间）
var options = {
  scope: bucket,
  expires: 7200
};

// 构建上传策略函数,生成token并设置回调的url以及需要回调给业务服务器的数据。
function uptoken() {
  var putPolicy = new qiniu.rs.PutPolicy(options);
  // putPolicy.callbackUrl = 'http://your.domain.com/callback'; //此处的回调服务器地址需要你的公网服务器地址,但是我直接在本地操作的,没有公网地址,所以就没有改动七牛云的example了,直接copy没改
  // putPolicy.callbackBody = 'filename=$(fname)&filesize=$(fsize)';
  let qiniuntoken = putPolicy.uploadToken(mac);
  return qiniuntoken;//返回token数据
}

let token = '' //token
//上传图片前获取 此处配置了跨域，在vue.config.js里面
upload_byfront_router.get('/token', function (req, res, next) {
        // 方法一：上传图片流程的思路(通过前台上传图片)：

        // 1.接收token前的操作
        // 说明：前台点击上传图片的按钮前,需要先获取七牛云的token,需要的流程如下：
        // 1.1前台打开本地图片的时候,需要获取需要获取本地图片的名称（用来赋值给下面的key,以便生成token）,然后发给后台,后台把文件名称（此时文件名建议进行操作,重命名）赋值给key
        // 1.2后台根据：key以及你的七牛云命名空间的名称即：bucket 生成token 后发送给前台
				// 还有一种做法就是可以直接根据用户的公钥私钥直接生成token，本文采取直接使用公钥私钥方式生成token，无需文件名称的参与

        // 2.接受到token后的操作
        // 2.1前台接收到token,需要把文件转为字节流 然后把【token】以及【文件字节流】以及【文件名称：key】打包成一个对象,然后开始发送到七牛云

        // 3.具体代码：后台操作
        //生成上传 Token
        token = uptoken(); //此处的token需要发给前台,好让前台开始操作,实现图片上传
        console.log("七牛云上传图片的token:", token); //后台代码结束,只需要发送token给前台，前台获取凭证就可以上传图片了
        res.send({
          status: 200,//状态码200
          token:token,//发送token给前台,前台拿到开始可以上传图片的操作
          mag: '前台可以开始上传图片!'
              });
})

module.exports = upload_byfront_router;
